import { BaseEntity } from "@/types/base";

/**
 * 结算单查询对象
 */
export interface SettlementQuery {
  billNo?: string; // 结算单号
  projectId?: number;
  orderId?: number;
  supplierId?: number;
  status?: string;
  startDate?: string;
  endDate?: string;
  pageNum: number;
  pageSize: number;
}

/**
 * 结算单视图对象
 */
export interface SettlementVO extends BaseEntity {
  id?: number; // 主键ID
  billNo?: string; // 结算单号
  projectId?: number;
  projectName?: string;
  orderId?: number;
  orderNo?: string;
  supplierId?: number;
  supplierName?: string;
  acceptanceIds?: string;
  acceptanceNos?: string;
  periodType?: string;
  periodTypeDesc?: string;
  startDate?: string; // 结算开始日期
  endDate?: string; // 结算结束日期
  totalAmount?: number; // 结算总金额
  status?: string; // 状态
  statusDesc?: string; // 状态描述
  remark?: string; // 备注
  partyBApproveBy?: string; // 乙方审核人
  partyBApproveTime?: string; // 乙方审核时间
  partyAApproveBy?: string; // 甲方审核人
  partyAApproveTime?: string; // 甲方审核时间
  details?: SettlementDetailVO[]; // 结算明细
}

/**
 * 结算单表单对象
 */
export interface SettlementForm {
  id?: number; // 主键
  billNo?: string; // 结算单号
  projectId: number;
  orderId: number;
  supplierId: number;
  periodType?: string;
  startDate: string; // 结算开始日期
  endDate: string; // 结算结束日期
  totalAmount?: number; // 结算总金额
  status?: string; // 状态
  remark?: string; // 备注
  details: SettlementDetailVO[]; // 结算明细
}

/**
 * 结算明细视图对象
 */
export interface SettlementDetailVO extends BaseEntity {
  id?: number; // 明细ID
  parentId?: number; // 结算单ID
  personnelId: number; // 人员ID
  personnelName?: string; // 人员姓名
  attendanceDays: number; // 出勤天数
  overtimeHours?: number; // 加班时长
  monthlyRate?: number; // 月薪
  dailyRate?: number; // 日薪
  overtimeRate?: number; // 加班费率
  attendanceAmount?: number; // 出勤金额
  overtimeAmount?: number; // 加班金额
  totalAmount?: number; // 结算总金额
  remark?: string; // 备注
}

/**
 * 结算单请求对象
 */
export interface SettlementRequest {
  id?: number; // 主键
  billNo?: string; // 结算单号
  projectId?: number;
  orderId: number;
  supplierId: number;
  startDate: string; // 结算开始日期
  endDate: string; // 结算结束日期
  totalAmount?: number; // 结算总金额
  status?: string; // 状态
  remark?: string; // 备注
  personnelIds?: number[]; // 人员ID列表
}

/**
 * 结算单审核请求对象
 */
export interface SettlementApproveRequest {
  id: number; // 结算单ID
  approved: boolean; // 是否通过
  approveRemark?: string; // 审核备注
}

/**
 * 结算单状态枚举
 */
export enum SettlementStatus {
  /** 草稿 */
  DRAFT = "0",
  /** 待乙方审核 */
  PARTY_B_PENDING = "1",
  /** 乙方已确认 */
  PARTY_B_APPROVED = "2",
  /** 待甲方审核 */
  PARTY_A_PENDING = "3",
  /** 已完成 */
  COMPLETED = "4",
  /** 已取消 */
  CANCELLED = "9"
}
